﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WpfApplication2.Helpers;
using System.Windows.Input;
using WpfApplication2.UserControls;
using System.Windows.Controls;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.Views.Afiliado;
using WpfApplication2.Views.TipoOrden;
using WpfApplication2.Views;
namespace WpfApplication2.ViewModels.TipoPlan
{
    public class IngresarPlanViewModel : ViewModel
    {
        public Instancias Instancias { get; set; }
        public Visibility PanelDatosVisible
        {
            get
            {
                return panelDatosVisible;
            }
            set
            {
                if (panelDatosVisible != value)
                {
                    panelDatosVisible = value;
                    RaisePropertyChanged("PanelDatosVisible");
                }
            }
        }
        private Visibility panelDatosVisible;
      
        public Service1SoapClient WS;
        #region properties

        public String NombreAux
        {
            get
            {
                return nombreAux;
            }
            set
            {
                if (nombreAux != value)
                {
                    nombreAux = value;
                    RaisePropertyChanged("NombreAux");
                }
            }
        }
        private String nombreAux;

        public Frame ContainerFrame
        {
            get;
            set;
        }
        public ModalDialog modalDialog
        {
            get;
            set;
        }
       public TipoPlanDTO PlanAux
       {
            get
            {
                return planAux;
            }
            set
            {
                if (planAux != value)
                {
                    planAux = value;
                    RaisePropertyChanged("PlanAux");
                }
            }
        }
        private TipoPlanDTO planAux;


        public PropertyElement Nombre
        {
            get
            {
                return nombre;
            }
            set
            {
                if (nombre != value)
                {
                    nombre = value;
                    RaisePropertyChanged("Nombre");
                }
            }
        }
        private PropertyElement nombre;
        public PropertyElement Descripcion
        {
            get
            {
                return descripcion;
            }
            set
            {
                if (descripcion != value)
                {
                    descripcion = value;
                    RaisePropertyChanged("Descripcion");
                }
            }
        }
        private PropertyElement descripcion;
        public PropertyElement PrecioTPlan
        {
            get
            {
                return precioTPlan;
            }
            set
            {
                if (precioTPlan != value)
                {
                    precioTPlan = value;
                    RaisePropertyChanged("PrecioTPlan");
                }
            }
        }
        private PropertyElement precioTPlan;


        public PropertyElement Nombre1
        {
            get
            {
                return nombre1;
            }
            set
            {
                if (nombre1 != value)
                {
                    nombre1 = value;
                    RaisePropertyChanged("Nombre1");
                }
            }
        }
        private PropertyElement nombre1;
        public PropertyElement Descripcion1
        {
            get
            {
                return descripcion1;
            }
            set
            {
                if (descripcion1 != value)
                {
                    descripcion1 = value;
                    RaisePropertyChanged("Descripcion1");
                }
            }
        }
        private PropertyElement descripcion1;
        public PropertyElement PrecioTPlan1
        {
            get
            {
                return precioTPlan1;
            }
            set
            {
                if (precioTPlan1 != value)
                {
                    precioTPlan1 = value;
                    RaisePropertyChanged("PrecioTPlan1");
                }
            }
        }
        private PropertyElement precioTPlan1;

        public TipoPlanDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private TipoPlanDTO[] resultados;

        public TipoPlanDTO[] TipoPlan
        {
            get
            {
                return tipoplan;
            }
            set
            {
                if (tipoplan != value)
                {
                    tipoplan = value;
                    RaisePropertyChanged("TipoPlan");
                }
            }
        }
        private TipoPlanDTO[] tipoplan;

        public TipoPlanDTO TipoPlan1
        {
            get
            {
                return tipoplan1;
            }
            set
            {
                if (tipoplan1 != value)
                {
                    tipoplan1 = value;
                    RaisePropertyChanged("TipoPlan1");
                }
            }
        }
        private TipoPlanDTO tipoplan1;

     

        #endregion

        public IngresarPlanViewModel(Instancias instancias)
        {

            WS = new Service1SoapClient();
            Instancias = instancias;
            InicializarPropiedades();
        }
        private void InicializarPropiedades()
        {
            PanelDatosVisible = Visibility.Collapsed;
            
            //Inicializacion de propiedades:
            Nombre = new PropertyElement() { Foreground = "Black", Name = "Nomnre" };
            Descripcion = new PropertyElement() { Foreground = "Black", Name = "Descripcion" };
            PrecioTPlan = new PropertyElement() { Foreground = "Black", Name = "PrecioTPlan" };

            //Seleccionar las propiedades que se quieren validar
            ValidationList = new List<PropertyElement>();
            Nombre.Validations.Add(ValidationType.Requerido);
            Descripcion.Validations.Add(ValidationType.Requerido);
            PrecioTPlan.Validations.Add(ValidationType.Requerido);
            ValidationList.Add(Nombre);
            ValidationList.Add(Descripcion);
            ValidationList.Add(PrecioTPlan);
        }

          
        private bool CanExecute()
        {
            return true;
        }
        
        private DelegateCommand guardarPlan;
        public ICommand GuardarPlan
        {
            get
            {
                if (guardarPlan == null)
                {
                    guardarPlan = new DelegateCommand(GuardarTplan, CanExecute);
                }
                return guardarPlan;
            }
        }
        private void GuardarTplan()
        {
            bool aux1 = string.IsNullOrEmpty(Nombre.Value);
            bool aux2 = string.IsNullOrEmpty(Descripcion.Value);
            bool aux3 = string.IsNullOrEmpty(PrecioTPlan.Value);


            if ((aux1) & (aux2) & (aux3))
            {
                Instancias.ModalDialog.ShowHandlerDialog(String.Format("Error en Ingreso de Datos"));
            }
            else
            {

                PlanAux = new TipoPlanDTO();
                PlanAux.Nombre = Nombre.Value;
                PlanAux.PrecioTPlan = PrecioTPlan.Value;
                PlanAux.Descripcion = Descripcion.Value;


                int cacho = WS.InsertarPlan(PlanAux);

                if (cacho > (-1))
                {
                    Instancias.ModalDialog.ShowHandlerDialog(String.Format("Exitos en Guardar el Plan"));
                    Instancias.FrameContent.Content = new Home();
                    
                }
                else
                {
                    Instancias.ModalDialog.ShowHandlerDialog(String.Format("se produjo un Error"));
                }

            }
        }

       
        private DelegateCommand editarPlan;


        public ICommand EditarPlan
        {
            get
            {
                if (editarPlan == null)
                {
                    editarPlan = new DelegateCommand(MostrarPanel, CanExecute);
                }
                return editarPlan;
            }
        }

        private void MostrarPanel()
        {
            PanelDatosVisible = Visibility.Visible;
            Descripcion1.Value = TipoPlan1.Descripcion;
            Nombre1.Value = TipoPlan1.Nombre;
            PrecioTPlan1.Value = TipoPlan1.PrecioTPlan;
        }



    }
}
